{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * revised and tuned configuration, updated views\n",
    " * training on full dataset (including Y3, new light curves, fixes)\n",
    " * trained with updated star radius estimations, multiple duplicates removed\n",
    " * removed instar examples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/revised_tuned_35_run_1/1/AstroCNNModel_revised_tuned_20220219_190314']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/revised_tuned_35_run_1'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-35-train/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v12-train.csv'\n",
    "\n",
    "nruns = 1\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "19698 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_e', 'disp_n', 'disp_j', 'disp_s', 'disp_b']\n",
    "\n",
    "col_e = labels.index('disp_e')\n",
    "thresh = 0.8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[col_e] >= thresh:\n",
    "            agg_preds[tic_id].append('disp_e')\n",
    "        else:\n",
    "            masked_v = [v if i != col_e else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "for l in labels:\n",
    "    tce_table[l] = tce_table[l[:-1] + l[-1].upper()]\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.8904899135446686\n",
      "Precision: 0.965625\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_e_p'] > 0)\n",
    "pos = (pl['disp_e'] > 0)\n",
    "\n",
    "pneg = (pl['disp_e_p'] == 0)\n",
    "neg = (pl['disp_e'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "384744604\n",
      "38680704\n",
      "389364577\n",
      "391812839\n",
      "288346083\n",
      "298757219\n",
      "28690049\n",
      "312758663\n",
      "321915222\n",
      "326974824\n",
      "346541355\n",
      "310004006\n",
      "387829772\n",
      "417146817\n",
      "13828577\n",
      "155001079\n",
      "186400565\n",
      "26516151\n",
      "28224552\n",
      "157018051\n",
      "202489696\n",
      "359030548\n",
      "113272112\n",
      "114053589\n",
      "118274531\n",
      "118798035\n",
      "119153127\n",
      "119774374\n",
      "120397217\n",
      "128966834\n",
      "141029164\n",
      "424986927\n",
      "425064757\n",
      "425561347\n",
      "425721385\n",
      "446348261\n",
      "446523110\n",
      "464592499\n",
      "464597067\n",
      "465989972\n",
      "49137560\n",
      "49390070\n",
      "232540264\n",
      "369860950\n",
      "373849740\n",
      "373917626\n",
      "375059587\n",
      "376778166\n",
      "376936788\n",
      "379464439\n",
      "380822002\n",
      "380822025\n",
      "380991167\n",
      "381366555\n",
      "382312510\n",
      "382366334\n",
      "383390264\n",
      "383390727\n",
      "383390914\n",
      "383716793\n",
      "136971594\n",
      "199795179\n",
      "237202699\n",
      "237217334\n",
      "256299194\n",
      "276936242\n",
      "277015008\n",
      "277099925\n",
      "277123828\n",
      "277373239\n",
      "277373256\n",
      "278270436\n",
      "417126296\n",
      "69259807\n",
      "142963071\n",
      "14742096\n",
      "167569135\n",
      "195416956\n",
      "357046804\n",
      "364951842\n",
      "366989877\n",
      "27491137\n",
      "365203184\n",
      "198410480\n",
      "300019694\n",
      "300405121\n",
      "30312902\n",
      "303842892\n",
      "304343052\n",
      "304729846\n",
      "306268580\n",
      "30639928\n",
      "306511505\n",
      "30931288\n",
      "309434156\n",
      "309486483\n",
      "314865962\n",
      "31532677\n",
      "318612970\n",
      "48356677\n",
      "429357337\n",
      "761960972\n",
      "340064696\n",
      "343484756\n",
      "343573862\n",
      "344978642\n",
      "287156968\n",
      "55497281\n",
      "56773241\n",
      "6594598\n",
      "75306937\n",
      "85765877\n",
      "87710200\n",
      "87775884\n",
      "88804537\n",
      "89138310\n",
      "89414346\n",
      "89564762\n",
      "431307905\n",
      "431711546\n",
      "435859871\n",
      "57919833\n",
      "240992272\n",
      "245480890\n",
      "234345288\n",
      "238183537\n",
      "238228073\n",
      "23826331\n",
      "254142627\n",
      "254231029\n",
      "255711238\n",
      "270563356\n",
      "279537689\n",
      "332999993\n",
      "333121226\n",
      "373901476\n",
      "456163318\n",
      "322284851\n",
      "323430114\n",
      "325339373\n",
      "337200525\n",
      "337200647\n",
      "49419483\n",
      "49799681\n",
      "50905927\n",
      "70887357\n",
      "91242033\n",
      "91246501\n",
      "116681081\n",
      "122224576\n",
      "1716106614\n",
      "198783841\n",
      "213521411\n",
      "277995171\n",
      "300000680\n",
      "358715557\n",
      "394177355\n",
      "169316288\n",
      "179308589\n",
      "182894670\n",
      "200135791\n",
      "201635971\n",
      "2032632\n",
      "21883641\n",
      "22187906\n",
      "219857012\n",
      "293664120\n",
      "294092966\n",
      "29984131\n",
      "364074479\n",
      "402659317\n",
      "265125525\n",
      "141943708\n",
      "158507355\n",
      "269580708\n",
      "272181655\n",
      "273758462\n",
      "279021812\n",
      "282755773\n",
      "299222138\n",
      "378275454\n",
      "428404278\n",
      "122479370\n",
      "265559455\n",
      "266676103\n",
      "266773101\n",
      "286330326\n",
      "286405674\n",
      "307484741\n",
      "311062274\n",
      "305876160\n",
      "362008388\n",
      "388076435\n",
      "402096687\n",
      "404771598\n",
      "404797784\n",
      "404853708\n",
      "407824089\n",
      "407922730\n",
      "409851100\n",
      "411868625\n",
      "411924206\n",
      "419587655\n",
      "421894914\n",
      "202426246\n",
      "332146607\n",
      "368013010\n",
      "408342294\n",
      "700376729\n",
      "73104778\n",
      "81749728\n",
      "82010075\n",
      "87593814\n",
      "170310381\n",
      "175318895\n",
      "176582931\n",
      "178953404\n",
      "187027955\n",
      "142850970\n",
      "152539284\n",
      "96785948\n",
      "101547609\n",
      "138588540\n",
      "138618351\n",
      "142748406\n",
      "150251466\n",
      "16146561\n",
      "166532356\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "394233079\n",
      "396957480\n",
      "18252911\n",
      "156993882\n",
      "119384992\n",
      "456588598\n",
      "464488581\n",
      "49449799\n",
      "369864019\n",
      "370134610\n",
      "370227480\n",
      "373843852\n",
      "384077498\n",
      "384195094\n",
      "43667308\n",
      "98937256\n",
      "272358852\n",
      "276793626\n",
      "277027632\n",
      "83408987\n",
      "117631084\n",
      "17131560\n",
      "360961597\n",
      "30113151\n",
      "301896004\n",
      "30193373\n",
      "306108833\n",
      "306270678\n",
      "31415158\n",
      "4933576\n",
      "358249491\n",
      "440738016\n",
      "453009027\n",
      "454140642\n",
      "463974233\n",
      "340217291\n",
      "349154278\n",
      "349373192\n",
      "279957439\n",
      "279958091\n",
      "280097876\n",
      "284196025\n",
      "79655149\n",
      "88353444\n",
      "231792014\n",
      "25078924\n",
      "300029336\n",
      "305582965\n",
      "32152605\n",
      "327593978\n",
      "13346068\n",
      "76698707\n",
      "29984021\n",
      "261136311\n",
      "298295539\n",
      "378275445\n",
      "277566483\n",
      "404768904\n",
      "404851226\n",
      "405864709\n",
      "354959477\n",
      "414897731\n",
      "220474216\n",
      "237944314\n",
      "105450460\n",
      "131857479\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>18252911</th>\n",
       "      <td>0.939296</td>\n",
       "      <td>0.006171</td>\n",
       "      <td>0.019639</td>\n",
       "      <td>0.020084</td>\n",
       "      <td>0.000492</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            disp_e    disp_n    disp_j    disp_s    disp_b\n",
       "tic_id                                                    \n",
       "18252911  0.939296  0.006171  0.019639  0.020084  0.000492"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 18252911)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e_p</th>\n",
       "      <th>disp_n_p</th>\n",
       "      <th>disp_j_p</th>\n",
       "      <th>disp_s_p</th>\n",
       "      <th>disp_b_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>373843852</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           disp_e_p  disp_n_p  disp_j_p  disp_s_p  disp_b_p  maxcount  disp_e  \\\n",
       "tic_id                                                                          \n",
       "373843852         1         0         0         0         0         1       0   \n",
       "\n",
       "           disp_n  disp_j  disp_s  disp_b  \n",
       "tic_id                                     \n",
       "373843852       0       1       0       0  "
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 373843852]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_e = row[0], row[1][col_e]\n",
    "        pred_es[i][tic_index[tic]] = pred_e\n",
    "\n",
    "lbl_es = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_e = row[0], row[1]['disp_e']\n",
    "    if tic in tic_index:\n",
    "        lbl_es[tic_index[tic]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = int(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9848331484695478, max R: 1.0, max P: 1.0\n",
      "100% recall at: 40%, threshold: 0.00278005886083338\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    ps.append(p)\n",
    "    rs.append(r)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
